package com.gitee.huanminabc.jcommon.dsa;

/**
 * 时间区间内的key
 * @Author huanmin
 * @Date 2024/6/6 下午5:00
 */
public class TimeIntervalKey {

    /**
     * 计算出来的hashCode,在timeInterval时间范围内,是唯一的
     * @param key 业务key
     * @param timeInterval 时间区间,单位毫秒
     * @return hashCode
     * 我们可以通过此方法对一个时间区间内的key进行加工,使得在此时间区间内,这个key是唯一的
     * 但是想要实现这个效果需要利用 HashSet 或者 ConcurrentHashSet 这样的数据结构作为缓存, 注意记得删除缓存
     */
    public  static int decorateKey(String key, double timeInterval) {
        long timestamp = System.currentTimeMillis();
        //这样计算出来的时间戳,在time_interval时间范围内,是唯一的且不会发生变化
        long t = (long) Math.floor(timestamp / timeInterval / 1.5);
        return String.format("%d%s", t, key).hashCode()& Integer.MAX_VALUE; //& Integer.MAX_VALUE 保证是正数
    }
}
